//.eslintrc.js
module.exports = {
  root: true,
  //环境
  env: {
    browser: true,
    es6: true,
    node: true,
  },
  parser: 'babel-eslint', //兼容es6插件
  parserOptions: {
    allowImportExportEverywhere: true,
    ecmaFeatures: {
      jsx: true, //jsx文件
    },
    ecmaVersion: 2016, //检查版本
    sourceType: 'module',
  },
  plugins: [
    'eslint-plugin-html', //检查html当中script标签
    'eslint-plugin-import',
    'eslint-plugin-promise',
    'eslint-plugin-vue', //vue自动格式化插件
  ],
  settings: {
    'html/html-extensions': ['.html', '.vue'], // 除js文件外，会去检查文件中script标签配置
  },
  rules: {
    'no-undef': 1, //不能有未定义的变量
    'no-use-before-define': 2, //未定义前不能使用
    'no-debugger': process.env.NODE_ENV === 'prod' ? 'off' : 'error',
    'no-compare-neg-zero': 'error', //禁止与-0比较
    'no-cond-assign': 'error', //禁止条件语句出现赋值
    'no-constant-condition': 'error', //禁止使用已知数判断
    'no-dupe-args': 'error', //禁止出现同名参数
    'no-dupe-keys': 'error', //禁止出现重复的key
    'no-duplicate-case': 'error', //不允许出现重复的case
    'no-empty': 'error', //禁止出现空语法块
    'no-ex-assign': 'error', //禁止对catch参数重新赋值
    'no-extra-boolean-cast': 'error', //禁止不必要的布尔转换
    'no-extra-semi': 'error', //去除不必要的分号
    'no-func-assign': 'error', //禁止函数重新赋值
    'no-inner-declarations': 'error', //禁止在嵌套的快中出现函数声明
    'no-irregular-whitespace': 'error', //禁止在字符串之外有多余的空白
    'no-obj-calls': 'error', //禁止对全局对象进行直接赋值调用
    'no-prototype-builtins': 'error', //禁止直接调用Object对象的属性
    'no-regex-spaces': 'off', //禁止正则出现多个空格
    'no-sparse-arrays': 'error', //禁止数组下标没有对应的值
    'no-template-curly-in-string': 'error', //禁止使用单引号或者多引号对字符串解析,同时禁止使用反引号不解析
    'no-unreachable': 'error', //禁止在return等之后编写代码
    'no-unsafe-finally': 'error', //禁止在finally中直接返回一个参数
    'no-unsafe-negation': 'error', //禁止对关系运算符的左操作数使用否定操作符。
    'use-isnan': 'error', //只能使用isNAN()检查nan
    'array-callback-return': 'error', //强制对数组筛选进行return
    'no-empty-function': 'error', //禁止使用空函数
    'no-eval': 'error', //禁止使用eval函数
    'no-floating-decimal': 'error', //禁止数字出现前.或者.点而前后无数值
    'no-global-assign': 'error', //禁止对只读的对象属性赋值
    'no-loop-func': 'error', //禁止for循环中出现函数声明和函数表达式
    'no-param-reassign': 'error', //禁止对函数内的参数进行重新赋值
    'no-redeclare': 'error', //禁止声明多个相同的变量
    'no-delete-var': 'error', //禁止删除变量
    'no-unused-vars': 'error', //禁止出现未使用过的变量
    'no-extra-parens': ['error', 'all'], //禁止不必要的括号
    'linebreak-style': ['off', 'windows'], //window换行符
    indent: ['error', 2], //空格为4个字符
    quotes: ['error', 'single'], //js使用单引号
    semi: ['error', 'always'], //结尾需要分号
  },
};
